Spring Cloud LoadBalancer এবং Ribbon এর ব্যবহার

Java Technologies - স্প্রিং বুট ক্লায়েন্ট (Spring Boot Client) - Client-Side Load Balancing
132

Spring Cloud LoadBalancer এবং Ribbon হল Spring Framework এর দুটি উপাদান যা মাইক্রোসার্ভিস আর্কিটেকচারে লোড ব্যালেন্সিং নিশ্চিত করতে ব্যবহার করা হয়। এগুলি সার্ভিসগুলির মধ্যে ভারসাম্যপূর্ণ এবং দক্ষ যোগাযোগ স্থাপন করতে সাহায্য করে।


Spring Cloud LoadBalancer

Spring Cloud LoadBalancer হলো Spring Cloud এর অংশ, যা Ribbon-এর বিকল্প হিসেবে কাজ করে। এটি Spring Boot এর নতুন এবং আধুনিক লোড ব্যালেন্সিং সমাধান।

Spring Cloud LoadBalancer সেটআপ:

১. ডিপেনডেন্সি যোগ:

Spring Boot 2.4 থেকে Spring Cloud LoadBalancer ডিফল্ট ভাবে উপলব্ধ। তবে নিশ্চিত করতে নিচের ডিপেনডেন্সি যোগ করুন:

Maven:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

Gradle:

implementation 'org.springframework.cloud:spring-cloud-starter-loadbalancer'

২. RestTemplate এর সাথে LoadBalancer সংযুক্ত করা:

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

৩. RestTemplate দিয়ে সার্ভিস কল করা:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class LoadBalancerController {

    private final RestTemplate restTemplate;

    public LoadBalancerController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    @GetMapping("/get-data")
    public String getData() {
        String url = "http://my-service-name/api/data"; // সার্ভিসের নাম
        return restTemplate.getForObject(url, String.class);
    }
}
  • নোট: সার্ভিসের নাম (যেমন my-service-name) DNS-এ সমাধান করা হবে Spring Cloud LoadBalancer এর মাধ্যমে।

৪. Custom LoadBalancer Configuration:

import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClients;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClients;
import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import reactor.core.publisher.Flux;

@Configuration
@LoadBalancerClients({
    @LoadBalancerClient(name = "my-service-name", configuration = CustomLoadBalancerConfig.class)
})
public class CustomLoadBalancerConfig {

    @Bean
    public ServiceInstanceListSupplier serviceInstanceListSupplier() {
        return new ServiceInstanceListSupplier() {
            @Override
            public Flux<List<ServiceInstance>> get() {
                // Custom logic for instance selection
                return Flux.just(List.of(
                    // Define your service instances here
                ));
            }
        };
    }
}

Spring Cloud Ribbon (ডিপ্রিকেটেড)

Ribbon একসময় Spring Framework এর ডিফল্ট লোড ব্যালেন্সার ছিল। Spring Cloud 2020 (Hoxton) এর পরে এটি ডিপ্রিকেটেড হয়েছে এবং Spring Cloud LoadBalancer এর মাধ্যমে প্রতিস্থাপিত হয়েছে।

Ribbon ব্যবহার (Legacy Projects):

১. ডিপেনডেন্সি যোগ:

Ribbon ব্যবহার করতে Spring Cloud Netflix Starter ডিপেনডেন্সি যোগ করুন।

Maven:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

২. RestTemplate এর সাথে Ribbon সংযুক্ত করা:

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RibbonConfig {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

৩. Ribbon কনফিগারেশন (application.yml):

Ribbon সার্ভিস ডিসকভারি এবং লোড ব্যালেন্সিং কনফিগার করার জন্য প্রয়োজন।

my-service-name:
  ribbon:
    listOfServers: localhost:8081,localhost:8082
    ConnectTimeout: 5000
    ReadTimeout: 5000

৪. Ribbon দিয়ে সার্ভিস কল:

@RestController
public class RibbonController {

    private final RestTemplate restTemplate;

    public RibbonController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    @GetMapping("/ribbon-test")
    public String ribbonTest() {
        String url = "http://my-service-name/api/data";
        return restTemplate.getForObject(url, String.class);
    }
}

Spring Cloud LoadBalancer বনাম Ribbon:

বৈশিষ্ট্যSpring Cloud LoadBalancerRibbon (Deprecated)
স্ট্যাটাসActiveDeprecated (Spring Cloud 2020 থেকে বন্ধ করা হয়েছে)।
Configuration MethodAnnotation এবং ProgrammaticMostly YAML/Properties-based
Customizabilityসহজে কাস্টমাইজ করা যায়।কম কাস্টমাইজেবল।
Reactive Supportসমর্থন করে।সমর্থন করে না।
DependencySpring Cloud Starter LoadBalancerSpring Cloud Netflix Ribbon

উপসংহার:

  • Spring Cloud LoadBalancer হল Ribbon এর উন্নত বিকল্প, যা Spring Boot এর নতুন সংস্করণগুলির জন্য উপযুক্ত।
  • যদি আপনার অ্যাপ্লিকেশনে Spring Boot 2.4+ ব্যবহার করা হয়, তাহলে Spring Cloud LoadBalancer ব্যবহার করুন।
  • Legacy প্রোজেক্টের জন্য Ribbon প্রয়োজন হলে সেটি ঠিকভাবে কনফিগার করুন।

প্রয়োজন হলে আরও উদাহরণ বা বিস্তারিত জানাতে বলুন! 😊

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...